In many memory systems, data is written to the memory in a page. However, there are many instances in which less than a page worth of data is desired to be written. For example, in flash firmware, while control block page writes are page aligned to maximize performance, the control data (e.g., a master index page) within the page may not be. As another example, firmware state/data structures are often accumulated and saved into non-volatile memory at regular time intervals or in response to certain events. However, at the time the save occurs, there may be less than a page worth of firmware state/data structures. As yet another example, during garbage collection, more than one source block can be moved to one destination block, and one source can be mixed with another source block data in same page. It can be a complex task to recover data in case of errors such as program failures or ECC errors. To simplify such cases, two source blocks of data can be mixed in the same page, with the result sometimes being less that a page worth of data. Additionally, file system writes are usually page aligned, but file sizes are not necessarily aligned with the page size.
In situations where data desired to be written is less than a page worth of data or when the data is not aligned with a page, the controller of the memory system can store the data in a buffer (e.g., RAM) and then “pad” the data to create a full page. For example, the controller can first read adjacent data from the non-volatile memory and then appropriately pad and re-write the new data. As another example, the controller can add “dummy data” to pad the rest of the buffer to create a full page. The page worth of data, which includes the data desired to be written and the padded data, is then sent to the memory die for storage in non-volatile memory.